﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TOAcademias;

namespace DAOAcademias
{
    public class DOSeccion
    {
         DBModuloAcademiasDataContext dbml;

         public DOSeccion()
        {
            dbml = new DBModuloAcademiasDataContext();
        }

        public List<TOSeccion> obtenerSecciones(String codPlanificacion)
        {

            List<TOSeccion> listaSecciones = new List<TOSeccion>();

            var secciones = (from sec in dbml.SECCIONs
                             where sec.COD_PLANIFICACION == codPlanificacion
                            select sec
                             );

            foreach (var seccion in secciones)
            {

                TOSeccion toSeccion = new TOSeccion();
                toSeccion.Cod_seccion = seccion.COD_SECCION;
                toSeccion.Des_seccion = seccion.DES_SECCION;
                toSeccion.Cod_planificacion = seccion.COD_PLANIFICACION;
                toSeccion.Cod_instructor = seccion.COD_INSTRUCTOR;
                toSeccion.Cap_maxima = seccion.CAP_MAXIMA_SECCION.Value;
                toSeccion.Cap_minima = seccion.CAP_MINIMA_SECCION.Value;
                toSeccion.Estado = seccion.ESTADO;

                listaSecciones.Add(toSeccion);

            }

            return listaSecciones;
        }

        public List<TOSeccion> obtenerTodasSecciones()
        {

            List<TOSeccion> listaSecciones = new List<TOSeccion>();



            var secciones = (from sec in dbml.SECCIONs
                             select sec
                             );

            foreach (var seccion in secciones)
            {

                TOSeccion toSeccion = new TOSeccion();
                toSeccion.Cod_seccion = seccion.COD_SECCION;
                toSeccion.Des_seccion = seccion.DES_SECCION;
                toSeccion.Cod_planificacion = seccion.COD_PLANIFICACION;
                toSeccion.Cod_instructor = seccion.COD_INSTRUCTOR;
                toSeccion.Cap_maxima = seccion.CAP_MAXIMA_SECCION.Value;
                toSeccion.Cap_minima = seccion.CAP_MINIMA_SECCION.Value;
                toSeccion.Estado = seccion.ESTADO;

                listaSecciones.Add(toSeccion);

            }

            return listaSecciones;
        }

        public List<TOSeccion> obtenerSeccionesActivas(String codPlanificacion)
        {

            List<TOSeccion> listaSecciones = new List<TOSeccion>();



            var secciones = (from sec in dbml.SECCIONs
                             where sec.COD_PLANIFICACION == codPlanificacion && sec.ESTADO=="ACTIVO"
                             select sec
                             );

            foreach (var seccion in secciones)
            {

                TOSeccion toSeccion = new TOSeccion();
                toSeccion.Cod_seccion = seccion.COD_SECCION;
                toSeccion.Des_seccion = seccion.DES_SECCION;
                toSeccion.Cod_planificacion = seccion.COD_PLANIFICACION;
                toSeccion.Cod_instructor = seccion.COD_INSTRUCTOR;
                toSeccion.Cap_maxima = seccion.CAP_MAXIMA_SECCION.Value;
                toSeccion.Cap_minima = seccion.CAP_MINIMA_SECCION.Value;
                toSeccion.Estado = seccion.ESTADO;

                listaSecciones.Add(toSeccion);

            }

            return listaSecciones;
        }


        public List<TOSeccion> obtenerSeccionesActivasxInstructor(String codInstructor)
        {

            List<TOSeccion> listaSecciones = new List<TOSeccion>();
                    
            var secciones = (from sec in dbml.SECCIONs
                             join pla in dbml.PLANIFICACIONs on sec.COD_PLANIFICACION equals pla.COD_PLANIFICACION
                             join pe in dbml.PERIODOs on pla.COD_PERIODO equals pe.COD_PERIODO
                             where pe.ESTADO=="ACTIVO" && pla.EST_PLANIFICACION=="ACTIVO" && sec.ESTADO=="ACTIVO" && sec.COD_INSTRUCTOR==codInstructor
                             select sec
                             );

            foreach (var seccion in secciones)
            {

                TOSeccion toSeccion = new TOSeccion();
                toSeccion.Cod_seccion = seccion.COD_SECCION;
                toSeccion.Des_seccion = seccion.DES_SECCION;
                toSeccion.Cod_planificacion = seccion.COD_PLANIFICACION;
                toSeccion.Cod_instructor = seccion.COD_INSTRUCTOR;
                toSeccion.Cap_maxima = seccion.CAP_MAXIMA_SECCION.Value;
                toSeccion.Cap_minima = seccion.CAP_MINIMA_SECCION.Value;
                toSeccion.Estado = seccion.ESTADO;

                listaSecciones.Add(toSeccion);

            }

            return listaSecciones;
        }





        public void insertarSeccion(TOSeccion toSeccion)
        {
            List<TOSeccion> listaSecciones = obtenerTodasSecciones(); ;

            int aux = 0;
            int temp = 0;
            foreach (TOSeccion seccion in listaSecciones)
            {

                temp = Convert.ToInt32(seccion.Cod_seccion.Substring(2));
                if (temp > aux)
                {

                    aux = temp;
                }


            }
            aux = aux + 1;

            string codigo = "" + aux;

            codigo = "SE000".Substring(0, 5 - codigo.Length) + aux;



            SECCION sec = new SECCION();
            sec.COD_SECCION = codigo;
            sec.DES_SECCION = toSeccion.Des_seccion;
            sec.COD_INSTRUCTOR = toSeccion.Cod_instructor;
            sec.COD_PLANIFICACION = toSeccion.Cod_planificacion;
            sec.CAP_MAXIMA_SECCION = toSeccion.Cap_maxima;
            sec.CAP_MINIMA_SECCION = toSeccion.Cap_minima;
            sec.ESTADO = toSeccion.Estado;

            dbml.SECCIONs.InsertOnSubmit(sec);
            dbml.SubmitChanges();
        }

        public void modificarSeccion(TOSeccion toSeccion)
        {
            var seccion = (from sec in dbml.SECCIONs
                            where sec.COD_SECCION == toSeccion.Cod_seccion
                            select sec).Single();

            seccion.DES_SECCION = toSeccion.Des_seccion;
            seccion.COD_INSTRUCTOR = toSeccion.Cod_instructor;
            seccion.CAP_MAXIMA_SECCION = toSeccion.Cap_maxima;
            seccion.CAP_MINIMA_SECCION = toSeccion.Cap_minima;
            seccion.ESTADO = toSeccion.Estado;

            dbml.SubmitChanges();
        }

        public TOSeccion obtenerSeccion(string codigoSeccion)
        {

        



            var seccion = (from sec in dbml.SECCIONs
                           where sec.COD_SECCION == codigoSeccion
                             select sec
                             );



            TOSeccion toSeccion=null;
            if (seccion.Count() > 0)
            {
                toSeccion = new TOSeccion();
                toSeccion.Cod_seccion = seccion.First().COD_SECCION;
                toSeccion.Des_seccion = seccion.First().DES_SECCION;
                toSeccion.Cod_planificacion = seccion.First().COD_PLANIFICACION;
                toSeccion.Cod_instructor = seccion.First().COD_INSTRUCTOR;
                toSeccion.Cap_maxima = seccion.First().CAP_MAXIMA_SECCION.Value;
                toSeccion.Cap_minima = seccion.First().CAP_MINIMA_SECCION.Value;
                toSeccion.Estado = seccion.First().ESTADO;
 
            }

                
               

           

            return toSeccion;
        }
    }
}
